home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.tree;
-
- import sun.tools.asm.Assembler;
- import sun.tools.java.AmbiguousField;
- import sun.tools.java.ClassDeclaration;
- import sun.tools.java.ClassDefinition;
- import sun.tools.java.ClassNotFound;
- import sun.tools.java.CompilerError;
- import sun.tools.java.Constants;
- import sun.tools.java.Environment;
- import sun.tools.java.FieldDefinition;
- import sun.tools.java.Type;
-
- public class AssignAddExpression extends AssignOpExpression {
- public AssignAddExpression(int var1, Expression var2, Expression var3) {
- super(5, var1, var2, var3);
- }
-
- void selectType(Environment var1, Context var2, int var3) {
- if (super.left.type == Type.tString) {
- super.type = Type.tString;
- } else {
- if ((var3 & 128) != 0) {
- super.type = Type.tDouble;
- } else if ((var3 & 64) != 0) {
- super.type = Type.tFloat;
- } else if ((var3 & 32) != 0) {
- super.type = Type.tLong;
- } else {
- super.type = Type.tInt;
- }
-
- super.right = ((Node)this).convert(var1, var2, super.type, super.right);
- }
- }
-
- public int costInline(int var1) {
- return super.type.isType(10) ? 25 : super.costInline(var1);
- }
-
- void code(Environment var1, Context var2, Assembler var3, boolean var4) {
- if (super.type.isType(10)) {
- int var5 = super.left.codeLValue(var1, var2, var3);
- ((Expression)this).codeDup(var1, var2, var3, var5, 0);
- super.left.codeLoad(var1, var2, var3);
- ClassDeclaration var6 = var1.getClassDeclaration(Constants.idJavaLangStringBuffer);
- var3.add(super.where, 187, var6);
- var3.add(super.where, 89);
-
- try {
- ClassDefinition var7 = var2.field.getClassDefinition();
- FieldDefinition var8 = var6.getClassDefinition(var1).matchMethod(var1, var7, Constants.idInit);
- var3.add(super.where, 183, var8);
- var3.add(super.where, 95);
- Type[] var9 = new Type[]{Type.tString};
- var8 = var6.getClassDefinition(var1).matchMethod(var1, var7, Constants.idAppend, var9);
- var3.add(super.where, 182, var8);
- super.right.codeAppend(var1, var2, var3, var6);
- var8 = var6.getClassDefinition(var1).matchMethod(var1, var7, Constants.idToString);
- var3.add(super.where, 182, var8);
- if (var4) {
- ((Expression)this).codeDup(var1, var2, var3, super.type.stackSize(), var5);
- }
-
- super.left.codeStore(var1, var2, var3);
- } catch (ClassNotFound var10) {
- throw new CompilerError(var10);
- } catch (AmbiguousField var11) {
- throw new CompilerError(var11);
- }
- } else {
- super.code(var1, var2, var3, var4);
- }
- }
-
- void codeOperation(Environment var1, Context var2, Assembler var3) {
- var3.add(super.where, 96 + super.type.getTypeCodeOffset());
- }
- }
-